<?php
/**
 * Класс Controller_Team отвечает за обработку страниц команд
 * @author Mike
 */
class Controller_Team extends Controller_Base {
	
	public function action() {
		
		switch($this->arrRequest[0]) {
			case 'teams':
				$objUser = User_Seance::getUser();
				if($objUser->id) $this->actionTeamsPage($objUser);
				else throw new Exception ('', 403);
				break;
			default:
				$teamId = substr($this->arrRequest[0], 4);
				$objTeam = new Team(intval($teamId));
				if(!$objTeam->id) throw new Exception('', 404);
				if(isset($_GET['act']) && $objTeam->isTeamAdmin()) { // Если в массиве GET есть переменная action и текущий юзер - админ команды
					$actionType = $_GET['act'];
					switch ($actionType) {
						case 'edit' : // Редактирование команды	
							if(!isset($_GET['opt'])) $this->actionEdit($objTeam);
							else {
								switch($_GET['opt']) {
									case 'people':
										$this->actionPeoplePageForAdmin($objTeam);
										break;
									case 'requests':
										$this->actionTeamRequestsPage($objTeam);
										break;
									case 'admins':
										$this->actionTeamAdminsPage($objTeam);
										break;
									case 'search':
										$this->actionEditSearch($objTeam);
										break;
								}
							}
							break;						
								/*
								break;
							case 'edit-people' : // Состав команды для админа
								if(empty($_GET['opt'])) { // Если нет дополнительных параметров - отображаем страницу со списком участников команды
									$controller = new Controller_Team($this->arrRequest);
									$controller->actionPeoplePageForAdmin($objTeam);
								}
								else {
									$peopleOption = $_GET['opt'];
									switch ($peopleOption) { // Определяем дополнительную опцию
										case 'requests' : // Страница заявок на вступление в команду
											$this->actionTeamRequestsPage($objTeam);
											break;
										case 'admins' : // Страница руководителей
											$this->actionTeamAdminsPage($objTeam);
										case 'admins' : // Страница руководителей
											$this->actionTeamAdminsPage($objTeam);
											break;
										default:
											// Если левая опция - открываем страницу по умолчанию для текущего action'а - страницу состава команды для админа
											$this->actionPeoplePageForAdmin($objTeam);
											break;
									}
								}				
								break;
								*/
						case 'people' :
							$this->actionPeoplePage($objTeam);
							break;
						default:
							// Если передали левые GET-данные - открываем главную страницу команды
							$this->actionTeamPage($objTeam);
							break;
					}
				}
				else { // Главная страница команды
					$controller = new Controller_Team($this->arrRequest);
					$controller->actionTeamPage($objTeam);
				}
		}		
	}
	
	/**
	 * Страница команд зарегистрированного пользователя
	 * @param User $objUser - объект пользователя
	 */
	public function actionTeamsPage($objUser) {
		if (isset($_POST['Team'])) {
			$objTeam = new Team($_POST['Team']);
			if ($objTeam->save()) User_Seance::moveTo(W_ABSPATH . 'team' . $objTeam->id);
		}
		$arrTeams = $objUser->find('all', array('`team`.`team_name`,`team`.`ID_team`,`city`.`city_name`,`team`.`avatar_filename`','joins' => 'INNER JOIN `team_user` USING(`ID_user`) INNER JOIN `team` ON `team_user`.`ID_team`=`team`.`ID_team` INNER JOIN `city` ON `city`.`ID_city`=`team`.`ID_city`', 'conditions' => "`user`.`ID_user`='" . $objUser->id . "'"));
		$this->bodyAttr = 'user-teams';
		$this->title = 'Мои команды';
		
		$this->showHeader();
			View_Team::showUserTeams($arrTeams);
		$this->showFooter();
	}
	
	/**
	 * Страница команды
	 * 
	 * @param Team $objTeam - объект команды
	 */
	public function actionTeamPage(Team $objTeam) {
		$this->bodyAttr = 'team';
		$this->title = $objTeam->getField('team_name');
		$this->showHeader();
			View_Team::showTeamPage($objTeam);
		$this->showFooter();
	}
	
	/**
	 * Страница редактирование команды
	 *
	 * @param Team $objTeam - объект команды
	 */
	public function actionEdit(Team $objTeam) {
		if (isset($_POST['Team'])) {
			$avaName = $objTeam->getField('avatar_filename');
			$editId = $_POST['Team']['ID_team'];
			if ($editId == $objTeam->id) {
				$objTeam = new Team($_POST['Team']);
				if ($objTeam->save()) {
					$objTeam->setField('avatar_filename', $avaName); // Делаем это, потому что после создания объекта Team от массива пост, в нём не будет содержаться поля имени авы
					echo 'Команда сохранена!';
				}
			}
		}
		$this->bodyAttr = 'team-management';
		$this->title = $objTeam->getField('team_name') . ': Основное';
		$this->showHeader();
		View_Team::showEditPage($objTeam);
		$this->showFooter();
	}
	
	
	/**
	 * Страница команды со списком людей, входящих в неё (для админов)
	 *
	 * @param Team $objTeam - объект команды
	 */
	public function actionPeoplePageForAdmin(Team $objTeam) {
		$arrPeople = $objTeam->getTeamPeople();
		
		$this->bodyAttr = 'team-management';
		$this->title = $objTeam->getField('team_name') . ': Состав команды';
		$this->showHeader();
			View_Team::showPeoplePageForAdmin($arrPeople, $objTeam->id);
		$this->showFooter();
	}
	
	/**
	 * Страница команды со списком людей, входящих в неё (для обычных пользователей)
	 *
	 * @param Team $objTeam - объект команды
	 */
	public function actionPeoplePage(Team $objTeam) {
		$arrPeople = $objTeam->getTeamPeople();
	
		//$this->bodyAttr = 'team-management';
		$this->title = $objTeam->getField('team_name') . ': Состав команды';
		$this->showHeader();
			View_Team::showPeoplePage($arrPeople, $objTeam);
		$this->showFooter();
	}
	
	/**
	 * Страница заявок на вступление в текущую команду (для админов)
	 *
	 * @param Team $objTeam - объект команды
	 */
	public function actionTeamRequestsPage(Team $objTeam) {
		$this->bodyAttr = 'team-management';
		$arrRequests = $objTeam->getRequestsInTeam();
		$this->title = 'Заявки';
		$this->showHeader();
		View_Team::showTeamRequestsPage($arrRequests, $objTeam->id);
		$this->showFooter();
	}
	
	/**
	 * Страница со списком админов команды
	 *
	 * @param Team $objTeam - объект команды
	 */
	public function actionTeamAdminsPage(Team $objTeam) {
		$this->bodyAttr = 'team-management';
		$arrAdmins = $objTeam->getTeamAdmins();
		$this->title = 'Руководители';
		$this->showHeader();
			View_Team::showTeamAdminsPage($arrAdmins, $objTeam->id);
		$this->showFooter();
	}
	
	/**
	 * Редактирование параметров поиска команды(вкладка "Поиск" в панели управления)
	 *
	 * @param Team $objTeam - объект команды
	 */
	public function actionEditSearch(Team $objTeam) {
		if (isset($_POST['Team'])) {
			$editId = $_POST['Team']['ID_team'];
			if ($editId == $objTeam->id) {
				unset($_POST['Team']['ID_team']);
				$objTeam->EditSearchParameters();
			}
		}
	
		$this->bodyAttr = 'team-profile-search-edit';
		$this->title = 'Редактирование команды';
	
		$this->showHeader();
		View_Team::showEditSearchForm($objTeam);
		$this->showFooter();
	}
}
?>